/*
 * Summary: implementation of XML Schema Datatypes
 * Description: module providing the XML Schema Datatypes implementation
 *              both definition and validity checking
 *
 * Copy: See Copyright for the status of this software.
 *
 * Author: Daniel Veillard
 */


#ifndef __XML_SCHEMA_TYPES_H__
#define __XML_SCHEMA_TYPES_H__

#include <libxml/xmlversion.h>

#ifdef LIBXML_SCHEMAS_ENABLED

#include <libxml/schemasInternals.h>
#include <libxml/xmlschemas.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef enum {
    XML_SCHEMA_WHITESPACE_UNKNOWN = 0,
    XML_SCHEMA_WHITESPACE_PRESERVE = 1,
    XML_SCHEMA_WHITESPACE_REPLACE = 2,
    XML_SCHEMA_WHITESPACE_COLLAPSE = 3
} xmlSchemaWhitespaceValueType;

XMLPUBFUN void XMLCALL        
            xmlSchemaInitTypes        (void);
XMLPUBFUN void XMLCALL        
        xmlSchemaCleanupTypes        (void);
XMLPUBFUN xmlSchemaTypePtr XMLCALL 
        xmlSchemaGetPredefinedType    (const xmlChar *name,
                         const xmlChar *ns);
XMLPUBFUN int XMLCALL        
        xmlSchemaValidatePredefinedType    (xmlSchemaTypePtr type,
                         const xmlChar *value,
                         xmlSchemaValPtr *val);
XMLPUBFUN int XMLCALL        
        xmlSchemaValPredefTypeNode    (xmlSchemaTypePtr type,
                         const xmlChar *value,
                         xmlSchemaValPtr *val,
                         xmlNodePtr node);
XMLPUBFUN int XMLCALL        
        xmlSchemaValidateFacet        (xmlSchemaTypePtr base,
                         xmlSchemaFacetPtr facet,
                         const xmlChar *value,
                         xmlSchemaValPtr val);
XMLPUBFUN int XMLCALL
        xmlSchemaValidateFacetWhtsp    (xmlSchemaFacetPtr facet,
                         xmlSchemaWhitespaceValueType fws,
                         xmlSchemaValType valType,                         
                         const xmlChar *value,
                         xmlSchemaValPtr val,
                         xmlSchemaWhitespaceValueType ws);
XMLPUBFUN void XMLCALL        
        xmlSchemaFreeValue        (xmlSchemaValPtr val);
XMLPUBFUN xmlSchemaFacetPtr XMLCALL 
        xmlSchemaNewFacet        (void);
XMLPUBFUN int XMLCALL        
        xmlSchemaCheckFacet        (xmlSchemaFacetPtr facet,
                         xmlSchemaTypePtr typeDecl,
                         xmlSchemaParserCtxtPtr ctxt,
                         const xmlChar *name);
XMLPUBFUN void XMLCALL        
        xmlSchemaFreeFacet        (xmlSchemaFacetPtr facet);
XMLPUBFUN int XMLCALL        
        xmlSchemaCompareValues        (xmlSchemaValPtr x,
                         xmlSchemaValPtr y);
XMLPUBFUN xmlSchemaTypePtr XMLCALL        
    xmlSchemaGetBuiltInListSimpleTypeItemType    (xmlSchemaTypePtr type);
XMLPUBFUN int XMLCALL
    xmlSchemaValidateListSimpleTypeFacet    (xmlSchemaFacetPtr facet,
                         const xmlChar *value,
                         unsigned long actualLen,
                         unsigned long *expectedLen);
XMLPUBFUN xmlSchemaTypePtr XMLCALL
        xmlSchemaGetBuiltInType        (xmlSchemaValType type);
XMLPUBFUN int XMLCALL
        xmlSchemaIsBuiltInTypeFacet    (xmlSchemaTypePtr type, 
                         int facetType);
XMLPUBFUN xmlChar * XMLCALL
        xmlSchemaCollapseString        (const xmlChar *value);
XMLPUBFUN xmlChar * XMLCALL
        xmlSchemaWhiteSpaceReplace    (const xmlChar *value);
XMLPUBFUN unsigned long  XMLCALL
        xmlSchemaGetFacetValueAsULong    (xmlSchemaFacetPtr facet);
XMLPUBFUN int XMLCALL
        xmlSchemaValidateLengthFacet    (xmlSchemaTypePtr type, 
                         xmlSchemaFacetPtr facet,
                         const xmlChar *value,
                         xmlSchemaValPtr val,
                         unsigned long *length);
XMLPUBFUN int XMLCALL
        xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
                          xmlSchemaValType valType,
                          const xmlChar *value,
                          xmlSchemaValPtr val,                          
                          unsigned long *length,
                          xmlSchemaWhitespaceValueType ws);
XMLPUBFUN int XMLCALL
        xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, 
                         const xmlChar *value,
                         xmlSchemaValPtr *val, 
                         xmlNodePtr node);
XMLPUBFUN int XMLCALL
        xmlSchemaGetCanonValue        (xmlSchemaValPtr val,
                         const xmlChar **retValue);
XMLPUBFUN int XMLCALL
        xmlSchemaGetCanonValueWhtsp    (xmlSchemaValPtr val,                         
                         const xmlChar **retValue,
                         xmlSchemaWhitespaceValueType ws);
XMLPUBFUN int XMLCALL
        xmlSchemaValueAppend        (xmlSchemaValPtr prev,
                         xmlSchemaValPtr cur);
XMLPUBFUN xmlSchemaValPtr XMLCALL
        xmlSchemaValueGetNext        (xmlSchemaValPtr cur);
XMLPUBFUN const xmlChar * XMLCALL
        xmlSchemaValueGetAsString    (xmlSchemaValPtr val);
XMLPUBFUN int XMLCALL
        xmlSchemaValueGetAsBoolean    (xmlSchemaValPtr val);
XMLPUBFUN xmlSchemaValPtr XMLCALL
        xmlSchemaNewStringValue        (xmlSchemaValType type,
                         const xmlChar *value);
XMLPUBFUN xmlSchemaValPtr XMLCALL
        xmlSchemaNewNOTATIONValue    (const xmlChar *name,
                         const xmlChar *ns);
XMLPUBFUN xmlSchemaValPtr XMLCALL
        xmlSchemaNewQNameValue        (const xmlChar *namespaceName,
                         const xmlChar *localName);
XMLPUBFUN int XMLCALL
        xmlSchemaCompareValuesWhtsp    (xmlSchemaValPtr x,
                         xmlSchemaWhitespaceValueType xws,
                         xmlSchemaValPtr y,
                         xmlSchemaWhitespaceValueType yws);
XMLPUBFUN xmlSchemaValPtr XMLCALL
        xmlSchemaCopyValue        (xmlSchemaValPtr val);
XMLPUBFUN xmlSchemaValType XMLCALL
        xmlSchemaGetValType        (xmlSchemaValPtr val);

#ifdef __cplusplus
}
#endif

#endif /* LIBXML_SCHEMAS_ENABLED */
#endif /* __XML_SCHEMA_TYPES_H__ */
